 -----------------------A* 算法 所需Node类-----------------------------------
local AllNode={}

return {
	clear=function()
		for k,v in pairs(AllNode) do
			v:dtor()
		end
		AllNode={}
	end,
	new = function(inst,...)
		if AllNode[inst] then
			return AllNode[inst]
		end
		local n={
			__inst=inst,
			__arg={...},
			G=0,
			H=0,
			Connection={},
			
			F=function(self)
				return self.G+self.H
			end,
			
			Walkeble=function(self) --能否行走
				return self.__inst:Walkeble(unpack(self.__arg))
			end,

			Neighbor=function(self) --获取邻居
				local nclass=require(script)
				local ns= self.__inst:Neighbor(unpack(self.__arg))
				local neighbors={}
				for _,v in pairs(ns) do
					table.insert(neighbors,nclass.new(v,unpack(self.__arg)))
				end
				return neighbors
			end,
			
			GetDistance=function(self,node) --获取寻路代价
				local ds= self.__inst:GetDistance(node.__inst,unpack(self.__arg))
				return ds
			end,

			SetConnection=function(self,node) -- 设置路径
				self.Connection=node
			end,
	
			dtor=function(self) --销毁寻路节点
				self.__inst=nil
				self.__arg=nil
				self.F=0
				self.G=0
				self.H=0
				self.Connection=nil
			end,
		}

		AllNode[inst]=n
		return n
	end
};

